Q-Learning এবং Deep Q-Learning Algorithm

CNTK তে Reinforcement Learning (RL) - মাইক্রোসফট কগনিটিভ টুলকিট (Microsoft Cognitive Toolkit) - Machine Learning

393

Q-Learning এবং Deep Q-Learning (DQN) হল Reinforcement Learning (RL) এর দুটি শক্তিশালী অ্যালগরিদম। এদের উদ্দেশ্য হল, একটি এজেন্টকে পরিবেশে সিদ্ধান্ত গ্রহণ শিখানো যাতে এটি সর্বোচ্চ রিওয়ার্ড অর্জন করতে পারে।


Q-Learning

Q-Learning হল একটি model-free reinforcement learning অ্যালগরিদম যা একটি Markov Decision Process (MDP)-এ কাজ করে। এটি একটি off-policy এলগরিদম, যেখানে Q-values বা action-value function আপডেট করা হয়, কিন্তু কোন পলিসি ব্যবহার করা হয় না (এটি পরবর্তীতে ব্যবহারকারীর দ্বারা নির্বাচিত হতে পারে)।

Q-Learning এর মূল ধারণা:

  • Q-value: এটি একটি (state, action) জোড়ার জন্য একটি মান প্রদান করে, যা বলে দেয় যে একটি নির্দিষ্ট অবস্থায় (state) একটি নির্দিষ্ট কাজ (action) নেওয়ার ফলে কত রিওয়ার্ড অর্জিত হতে পারে।
  • Bellman Equation: Q-Learning একটি গুরুত্বপূর্ণ সূত্র ব্যবহার করে Bellman equation যাতে বর্তমান Q-value আপডেট হয় পূর্ববর্তী রিওয়ার্ড এবং ভবিষ্যত সম্ভাব্য রিওয়ার্ডের উপর ভিত্তি করে।

Bellman Equation:

Q(s,a)Q(s,a)+α(r+γmaxaQ(s,a)Q(s,a))Q(s, a) \leftarrow Q(s, a) + \alpha \left( r + \gamma \max_a Q(s', a') - Q(s, a) \right)

এখানে:

  • ss: বর্তমান অবস্থা (state)
  • aa: বর্তমান কর্ম (action)
  • rr: রিওয়ার্ড
  • ss': পরবর্তী অবস্থা
  • α\alpha: শিখন হার (learning rate)
  • γ\gamma: ডিসকাউন্ট ফ্যাক্টর (discount factor), ভবিষ্যতের রিওয়ার্ডের গুরুত্ব।

Q-Learning এর Steps:

  1. Initialization:
    • সমস্ত Q-values প্রাথমিকভাবে শূন্য বা একটি ছোট মানে ইনিশিয়ালাইজ করা হয়।
  2. Exploration vs Exploitation:
    • Exploration: বিভিন্ন অ্যাকশন ট্রাই করা।
    • Exploitation: আগে থেকে শিখে নেওয়া Q-values অনুযায়ী সেরা অ্যাকশন বেছে নেওয়া।
    • সাধারণত ε-greedy policy ব্যবহার করা হয়, যেখানে একটি ছোট সম্ভাবনায় (ε) নতুন অ্যাকশন নেওয়া হয় এবং অন্যথায় সর্বোচ্চ Q-value অনুযায়ী কাজ করা হয়।
  3. Q-value আপডেট:
    • পরিবেশের সাথে ইন্টারঅ্যাক্ট করার পরে, পুরানো Q-value আপডেট করা হয়।
    • উদাহরণস্বরূপ, যদি আপনি একটি সঠিক অ্যাকশন নেন এবং পুরস্কৃত হন, তবে সেই অ্যাকশনটির জন্য Q-value বৃদ্ধি পায়।

Q-Learning এর একটি উদাহরণ:

import numpy as np

# Environment parameters
n_actions = 4  # Number of possible actions
n_states = 6   # Number of states

# Q-table initialization
Q = np.zeros((n_states, n_actions))

# Learning parameters
alpha = 0.1  # Learning rate
gamma = 0.9  # Discount factor
epsilon = 0.1  # Exploration probability

# Example interaction
for episode in range(1000):
    state = np.random.randint(0, n_states)  # Random starting state
    
    for t in range(100):  # Limit for each episode's time steps
        # Exploration vs Exploitation
        if np.random.uniform(0, 1) < epsilon:
            action = np.random.randint(0, n_actions)  # Exploration
        else:
            action = np.argmax(Q[state, :])  # Exploitation
        
        # Get next state and reward (for simplicity in this example)
        next_state = (state + action) % n_states  # Example transition
        reward = 1 if next_state == 5 else 0  # Reward for reaching state 5
        
        # Q-value update using Bellman equation
        Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
        
        # Move to next state
        state = next_state

Deep Q-Learning (DQN)

Deep Q-Learning হল Q-Learning এর একটি উন্নত সংস্করণ, যা Deep Learning ব্যবহার করে Q-values এবং পলিসি ফাংশন শিখতে সাহায্য করে। যখন Q-table সীমিত সাইজের জন্য কার্যকর, তবে Deep Q-Learning অনেক বড় বা জটিল পরিবেশে কার্যকরী, যেখানে states এবং actions এর বিশাল স্পেস থাকে।

Deep Q-Learning এর মূল ধারণা:

  • Neural Network ব্যবহার করে Q-function (state-action values) অ্যাপ্রক্সিমেট করা হয়।
  • এই ক্ষেত্রে, Q-values Neural Network দ্বারা অনুমান করা হয়, যেখানে ইনপুট হল স্টেট এবং আউটপুট হল বিভিন্ন অ্যাকশনগুলির জন্য Q-value।

Deep Q-Learning এর Steps:

  1. Neural Network Initialization:
    • একটি নিউরাল নেটওয়ার্ক তৈরি করা হয় যা states এর জন্য Q-values প্রেডিক্ট করে।
  2. Experience Replay:
    • প্রশিক্ষণের জন্য বিভিন্ন অভিজ্ঞতা (state, action, reward, next_state) সংগ্রহ করা হয় এবং replay buffer তে সঞ্চিত থাকে। এরপর একযোগে কিছু অভিজ্ঞতা র্যান্ডমভাবে নির্বাচিত করা হয়।
  3. Target Network:
    • ডিপ Q-লার্নিং মডেলে একটি target network ব্যবহার করা হয়, যা এক পর্যায়ে প্রশিক্ষিত Q-network এর কপি থাকে এবং Q-value আপডেটের জন্য ব্যবহৃত হয়।

Deep Q-Learning এর একটি উদাহরণ (PyTorch):

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import random

# Deep Q-Network (Neural Network to approximate Q-function)
class DQN(nn.Module):
    def __init__(self, n_states, n_actions):
        super(DQN, self).__init__()
        self.fc1 = nn.Linear(n_states, 128)
        self.fc2 = nn.Linear(128, 128)
        self.fc3 = nn.Linear(128, n_actions)
    
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        return self.fc3(x)

# Hyperparameters
n_states = 6
n_actions = 4
learning_rate = 0.001
gamma = 0.9
epsilon = 0.1
batch_size = 32

# Initialize DQN
model = DQN(n_states, n_actions)
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
loss_fn = nn.MSELoss()

# Experience Replay
memory = []
def store_experience(state, action, reward, next_state):
    memory.append((state, action, reward, next_state))
    if len(memory) > 10000:
        memory.pop(0)

def sample_experience():
    return random.sample(memory, batch_size)

# Q-learning loop
for episode in range(1000):
    state = np.random.randint(0, n_states)
    for t in range(100):
        # Choose action (ε-greedy)
        if random.random() < epsilon:
            action = random.randint(0, n_actions - 1)
        else:
            state_tensor = torch.tensor([state], dtype=torch.float32)
            q_values = model(state_tensor)
            action = torch.argmax(q_values).item()
        
        # Simulate next state and reward
        next_state = (state + action) % n_states
        reward = 1 if next_state == 5 else 0
        
        # Store experience
        store_experience(state, action, reward, next_state)
        
        # Sample batch and train
        if len(memory) >= batch_size:
            batch = sample_experience()
            for s, a, r, ns in batch:
                target = r + gamma * torch.max(model(torch.tensor([ns], dtype=torch.float32)))
                current_q = model(torch.tensor([s], dtype=torch.float32))[a]
                loss = loss_fn(current_q, target)
                
                optimizer.zero_grad()
                loss.backward()
                optimizer.step()
        
        # Move to next state
        state = next_state

Q-Learning এবং Deep Q-Learning এর মধ্যে পার্থক্য

FeatureQ-LearningDeep Q-Learning (DQN)
State Spaceছোট সাইজের states এর জন্য কার্যকরবড় এবং জটিল state space এর জন্য কার্যকর
Q-value representationটেবিল (table)Neural network
Model TypeModel-freeModel-free (neural network)
MemoryNo experience replayExperience replay (Replay buffer)
Target NetworkNot usedTarget network used for stability

**সার

াংশ**

  • Q-Learning একটি শক্তিশালী এবং সহজ reinforcement learning অ্যালগরিদম, যা ছোট এবং সীমিত state-action space এর জন্য কার্যকর।
  • Deep Q-Learning (DQN) একটি আধুনিক সংস্করণ, যা নিউরাল নেটওয়ার্ক ব্যবহার করে Q-values অ্যাপ্রক্সিমেট করে এবং এটি বৃহত্তর এবং জটিল state-action space এর জন্য উপযুক্ত। DQN অভিজ্ঞতা পুনঃপ্রাপ্তি (experience replay) এবং টার্গেট নেটওয়ার্কের মতো বৈশিষ্ট্য ব্যবহার করে প্রশিক্ষণ প্রক্রিয়া স্থিতিশীল রাখে।

Q-Learning সাধারণত ছোট এবং সিম্পল টাস্কের জন্য, আর Deep Q-Learning বৃহত্তর এবং জটিল পরিবেশে দক্ষভাবে কাজ করতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...